|
Emplacement du menu |
---|
Esquisse → Contraintes d'esquisse → Contrainte de réfraction (Loi de Snell) |
Ateliers |
Sketcher |
Raccourci par défaut |
K W |
Introduit dans la version |
0.15 |
Voir aussi |
Aucun |
L'outil Sketcher Contrainte de réfraction contraint deux lignes à suivre la loi de réfraction de la lumière lorsqu'elle pénètre à travers une interface où deux matériaux ayant des indices de réfraction différents se rencontrent. Voir Loi de Snell.
Loi de Snell
La séquence des clics est indiquée par des flèches jaunes avec des nombres, n1 et n2 indiquent où les indices de réfraction se trouvent.
Les contraintes peuvent être créées à partir de macros et de la console Python en utilisant la fonction suivante:
Sketch.addConstraint(Sketcher.Constraint('SnellsLaw',line1,pointpos1,line2,pointpos2,interface,n2byn1))
où:
Sketch
est un objet d'esquisseline1
et pointpos1
sont deux entiers identifiant l'extrémité de la ligne dans le milieu avec un indice de réfraction de n1. line1
est l'index de la ligne dans l'esquisse (la valeur, retournée par Sketch.addGeometry), et pointpos1
doit être 1 pour le point de départ et 2 pour le point final.line2
et pointpos2
sont les index spécifiant le point final de la seconde ligne (dans le support n2)interface
est l'index spécifiant la ligne indiquant la position de l'interface entre le support n1 et le support n2n2byn1
est un nombre à virgule flottante égal au rapport des indices de réfraction n2/n1La page Sketcher Scripts explique les valeurs qui peuvent être utilisées pour line1
, pointpos1
, line2
, pointpos2
et interface
et contient d'autres exemples sur la façon de créer des contraintes à partir de scripts Python.
Exemple :
import Sketcher
import Part
import FreeCAD
StartPoint = 1
EndPoint = 2
f = App.activeDocument().addObject("Sketcher::SketchObject","Sketch")
# add geometry to the sketch
icir = f.addGeometry(Part.Circle(App.Vector(-547.612366,227.479736,0),App.Vector(0,0,1),68.161979))
iline1 = f.addGeometry(Part.LineSegment(App.Vector(-667.331726,244.127090,0),App.Vector(-604.284241,269.275238,0)))
iline2 = f.addGeometry(Part.LineSegment(App.Vector(-604.284241,269.275238,0),App.Vector(-490.940491,256.878265,0)))
# add constraints
# helper constraints:
f.addConstraint(Sketcher.Constraint('Coincident',iline1,EndPoint,iline2,StartPoint))
f.addConstraint(Sketcher.Constraint('PointOnObject',iline1,EndPoint,icir))
# the Snell's law:
f.addConstraint(Sketcher.Constraint('SnellsLaw',iline1,EndPoint,iline2,StartPoint,icir,1.47))
App.ActiveDocument.recompute()